package com.cy.sca.member.controller;

import com.cy.sca.api.annotation.RequiredLog;
import com.cy.sca.api.feign.RemoteNoticeService;
import com.cy.sca.member.domain.LoginVo;
import com.cy.sca.member.domain.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;

@RestController
@RequestMapping("/member/")
public class MemberController {

    /**
     * 通过@value注解告诉spring框架从配置文件读取port
     * */
    @Value("${server.port}")
    private String server;

    /**
     * 基于此接口中的方法进行远程通知服务的调用
     * 404:资源没找到(访问的url是否正确)
     * 400:客户端发送的请求参数与服务端可接收的参数不匹配(个数,格式,类型)
     * 405:请求方式不匹配(服务端定义的post请求,客户端访问使用get请求)
     * 415:请求数据类型(content-type)与服务端不匹配
     * 401:认证失败(先登录)
     * 403:授权失败
     */
    @Autowired
    private RemoteNoticeService remoteNoticeService;

    @PostMapping
    public String doRegist(@RequestBody Member member) {

        System.out.println(server + "do" +member);
        HashMap<String, Object> map = new HashMap<>();
        map.put("mobile", "123456");    //手机号
        map.put("code", "666666");  //验证码
        //基于feign方式调用远程服务
        remoteNoticeService.sendMsg(map);
        return "regist ok";

    }

    /**
     * 业务执行时要记录日志？
     * 1）基于注解方式进行标记
     * 2）AOP方式获取标记日志
     * 3）将获取到的日志交给哪个服务进行记录（写入文件、写入sql、发送给大数据分析系统）
     * @param loginVo
     * @return
     */
    @RequiredLog //希望此注解描述的方法，在执行时要记录日志
    @PostMapping("/doLogin")
    public String doLogin(@RequestBody LoginVo loginVo) {

        System.out.println(loginVo);
        return "login ok";

    }

}
